package com.longma.server.service;

import com.longma.server.entity.RealtimeData;
import com.longma.server.pojo.dto.RealtimeDataAddDTO;
import com.longma.server.pojo.vo.home.PointVO;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author HAIBO
 * @since 2021-04-28
 */
public interface IRealtimeDataService {
    /**
     * 上报数据
     */
    RealtimeData receiveDataFromYc(String message) ;

    /**
     * 上报数据
     */
    RealtimeData receiveDataFromYc(RealtimeDataAddDTO addRequestDTO) ;

    /**
     * 获取指定时间内记录
     * list中同一云仓数据是按照时间从小到大排序
     */
    Map<Integer,List<RealtimeData>> getRealtimeDataRecordMap(List<Integer> yuncangIds, LocalDateTime startTime,LocalDateTime endTime);

    /**
    * 获取实时数据  取最新一条数据
    * 如果在配置超时时间内没有获取到数据，则不返回数据
    */
    Map<Integer,RealtimeData> getLatestRealtimeDataRecord(List<Integer> yuncangIds);

    /**
     * 获取实时发电功率曲线 统计间隔为x分钟  x分钟内如果有多条数据取平均 如果某个时间点没有数据使用插值算法填充
     * 如果某个云仓一条数据也没有取到，则不返回数据
     * list中同一云仓数据是按照时间是从小到大排序  并且时间间隔相差x分钟
     */
    Map<Integer, List<PointVO>> getPowerGenerationCurve(List<Integer> yuncangIds, Integer pointNum);

    /**
     * 获取实时用电功率曲线 统计间隔为x分钟  x分钟内如果有多条数据取平均 如果某个时间点没有数据使用插值算法填充
     * 如果某个云仓一条数据也没有取到，则不返回数据
     * list中同一云仓数据是按照时间是从小到大排序  并且时间间隔相差x分钟
     */
    Map<Integer, List<PointVO>> getPowerConsumptionCurve(List<Integer> yuncangIds, Integer pointNum);

    /**
     * 获取实时xxx曲线 统计间隔为x分钟  x分钟内如果有多条数据取平均 如果某个时间点没有数据使用插值算法填充
     * 如果某个云仓一条数据也没有取到，则不返回数据
     * list中同一云仓数据是按照时间是从小到大排序  并且时间间隔相差x分钟
     */
    Map<Integer, List<PointVO>> getCurve(List<Integer> yuncangIds,String columnName,Integer pointNum);

    /**
     * 获取实时xxx列表曲线 统计间隔为x分钟  x分钟内如果有多条数据取平均 如果某个时间点没有数据使用插值算法填充
     */
    Map<String, List<PointVO>> getCurve(Integer yuncangId,List<String> columnNames,Integer pointNum);

    /**
     * 获取登录用户所拥有云仓实时用电合计曲线
     */
    List<PointVO> getPowerConsumptionCurve();

    /**
     * 获取登录用户所拥有云仓实时发电合计曲线
     */
    List<PointVO> getPowerGenerationCurve();
}
